package com.deerblock;

import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Handler;
import android.util.Log;
import android.widget.RemoteViews;
import android.widget.Toast;

import com.umeng.analytics.MobclickAgent;
import com.umeng.commonsdk.UMConfigure;
import com.umeng.message.IUmengRegisterCallback;
import com.umeng.message.MsgConstant;
import com.umeng.message.PushAgent;
import com.umeng.message.UTrack;
import com.umeng.message.UmengMessageHandler;
import com.umeng.message.UmengNotificationClickHandler;
import com.umeng.message.common.UPushNotificationChannel;
import com.umeng.message.entity.UMessage;
import com.umeng.socialize.PlatformConfig;
//import com.umeng.soexample.push.UmengNotificationService;

import static android.os.Looper.getMainLooper;


public class UmInitConfig {

  private static final String TAG = MainApplication.class.getName();
  public static final String UPDATE_STATUS_ACTION = "com.umeng.message.example.action.UPDATE_STATUS";
  private Handler handler;

  public  void  UMinit(Context context){

    //初始化组件化基础库, 统计SDK/推送SDK/分享SDK都必须调用此初始化接口
    UMConfigure.init(context, Constant.UMAppkey, "Umeng", UMConfigure.DEVICE_TYPE_PHONE,
      null);

    String FileProvider = "com.deerBlock.fileprovider";
    PlatformConfig.setWeixin("wxdc1e388c3822c80b", "3baf1193c85774b3fd9d18447d76cab0");
    PlatformConfig.setWXFileProvider(FileProvider);
//    //企业微信设置
//    PlatformConfig.setWXWork("wwac6ffb259ff6f66a", "EU1LRsWC5uWn6KUuYOiWUpkoH45eOA0yH-ngL8579zs", "1000002", "wwauthac6ffb259ff6f66a000002");
//    PlatformConfig.setWXWorkFileProvider(FileProvider);

    PlatformConfig.setSinaWeibo("3921700954", "04b48b094faeb16683c32669824ebdad", "http://sns.whalecloud.com");
    PlatformConfig.setSinaFileProvider(FileProvider);
    PlatformConfig.setYixin("yxc0614e80c9304c11b0391514d09f13bf");
    PlatformConfig.setQQZone("101830139", "5d63ae8858f1caab67715ccd6c18d7a5");
    PlatformConfig.setQQFileProvider(FileProvider);
    PlatformConfig.setLaiwang("laiwangd497e70d4", "d497e70d4c3e4efeab1381476bac4c5e");
    PlatformConfig.setKakao("e4f60e065048eb031e235c806b31c70f");

    PlatformConfig.setVKontakte("5764965", "5My6SNliAaLxEm3Lyd9J");
    PlatformConfig.setDropbox("oz8v5apet3arcdy", "h7p2pjbzkkxt02a");

    //集成umeng-crash-vx.x.x.aar，则需要关闭原有统计SDK异常捕获功能
    MobclickAgent.setCatchUncaughtExceptions(false);
    //PushSDK初始化(如使用推送SDK，必须调用此方法)
    initUpush(context);

    //统计SDK是否支持采集在子进程中打点的自定义事件，默认不支持
    UMConfigure.setProcessEvent(true);//支持多进程打点

    // 页面数据采集模式
    // setPageCollectionMode接口参数说明：
    // 1. MobclickAgent.PageMode.AUTO: 建议大多数用户使用本采集模式，SDK在此模式下自动采集Activity
    // 页面访问路径，开发者不需要针对每一个Activity在onResume/onPause函数中进行手动埋点。在此模式下，
    // 开发者如需针对Fragment、CustomView等自定义页面进行页面统计，直接调用MobclickAgent.onPageStart/
    // MobclickAgent.onPageEnd手动埋点即可。此采集模式简化埋点工作，唯一缺点是在Android 4.0以下设备中
    // 统计不到Activity页面数据和各类基础指标(提示：目前Android 4.0以下设备市场占比已经极小)。

    // 2. MobclickAgent.PageMode.MANUAL：对于要求在Android 4.0以下设备中也能正常采集数据的App,可以使用
    // 本模式，开发者需要在每一个Activity的onResume函数中手动调用MobclickAgent.onResume接口，在Activity的
    // onPause函数中手动调用MobclickAgent.onPause接口。在此模式下，开发者如需针对Fragment、CustomView等
    // 自定义页面进行页面统计，直接调用MobclickAgent.onPageStart/MobclickAgent.onPageEnd手动埋点即可。

    // 如下两种LEGACY模式不建议首次集成友盟统计SDK的新用户选用。
    // 如果您是友盟统计SDK的老用户，App需要从老版本统计SDK升级到8.0.0版本统计SDK，
    // 并且：您的App之前MobclickAgent.onResume/onPause接口埋点分散在所有Activity
    // 中，逐个删除修改工作量很大且易出错。
    // 若您的App符合以上特征，可以选用如下两种LEGACY模式，否则不建议继续使用LEGACY模式。
    // 简单来说，升级SDK的老用户，如果不需要手动统计页面路径，选用LEGACY_AUTO模式。
    // 如果需要手动统计页面路径，选用LEGACY_MANUAL模式。
    // 3. MobclickAgent.PageMode.LEGACY_AUTO: 本模式适合不需要对Fragment、CustomView
    // 等自定义页面进行页面访问统计的开发者，SDK仅对App中所有Activity进行页面统计，开发者需要在
    // 每一个Activity的onResume函数中手动调用MobclickAgent.onResume接口，在Activity的
    // onPause函数中手动调用MobclickAgent.onPause接口。此模式下MobclickAgent.onPageStart
    // ,MobclickAgent.onPageEnd这两个接口无效。

    // 4. MobclickAgent.PageMode.LEGACY_MANUAL: 本模式适合需要对Fragment、CustomView
    // 等自定义页面进行手动页面统计的开发者，开发者如需针对Fragment、CustomView等
    // 自定义页面进行页面统计，直接调用MobclickAgent.onPageStart/MobclickAgent.onPageEnd
    // 手动埋点即可。开发者还需要在每一个Activity的onResume函数中手动调用MobclickAgent.onResume接口，
    // 在Activity的onPause函数中手动调用MobclickAgent.onPause接口。
    MobclickAgent.setPageCollectionMode(MobclickAgent.PageMode.AUTO);

  }

  /**
   * 主进程和子进程channel都需要进行初始化和注册
   */
  private void initUpush(Context context) {
    PushAgent pushAgent = PushAgent.getInstance(context);
    pushAgent.onAppStart();
    handler = new Handler(getMainLooper());

    //sdk开启通知声音
    pushAgent.setNotificationPlaySound(MsgConstant.NOTIFICATION_PLAY_SDK_ENABLE);
    // sdk关闭通知声音
    // mPushAgent.setNotificationPlaySound(MsgConstant.NOTIFICATION_PLAY_SDK_DISABLE);
    // 通知声音由服务端控制
    // mPushAgent.setNotificationPlaySound(MsgConstant.NOTIFICATION_PLAY_SERVER);

    // mPushAgent.setNotificationPlayLights(MsgConstant.NOTIFICATION_PLAY_SDK_DISABLE);
    // mPushAgent.setNotificationPlayVibrate(MsgConstant.NOTIFICATION_PLAY_SDK_DISABLE);

    UmengMessageHandler messageHandler = new UmengMessageHandler() {

      /**
       * 通知的回调方法（通知送达时会回调）
       */
      @Override
      public void dealWithNotificationMessage(Context context, UMessage msg) {
        //调用super，会展示通知，不调用super，则不展示通知。
        super.dealWithNotificationMessage(context, msg);
      }

      /**
       * 自定义消息的回调方法
       */
      @Override
      public void dealWithCustomMessage(final Context context, final UMessage msg) {

        handler.post(new Runnable() {

          @Override
          public void run() {
            // TODO Auto-generated method stub
            // 对自定义消息的处理方式，点击或者忽略
            boolean isClickOrDismissed = true;
            if (isClickOrDismissed) {
              //自定义消息的点击统计
              UTrack.getInstance(context).trackMsgClick(msg);
            } else {
              //自定义消息的忽略统计
              UTrack.getInstance(context).trackMsgDismissed(msg);
            }
            Toast.makeText(context, msg.custom, Toast.LENGTH_LONG).show();
          }
        });
      }

      /**
       * 自定义通知栏样式的回调方法
       */
      @Override
      public Notification getNotification(Context context, UMessage msg) {
        switch (msg.builder_id) {
          case 1:
            Notification.Builder builder;
            if (Build.VERSION.SDK_INT >= 26) {
              if (!UmengMessageHandler.isChannelSet) {
                UmengMessageHandler.isChannelSet = true;
                NotificationChannel chan = new NotificationChannel(UPushNotificationChannel.PRIMARY_CHANNEL,
                  PushAgent.getInstance(context).getNotificationChannelName(),
                  NotificationManager.IMPORTANCE_DEFAULT);
                NotificationManager manager = (NotificationManager) context.getSystemService(
                  Context.NOTIFICATION_SERVICE);
                if (manager != null) {
                  manager.createNotificationChannel(chan);
                }
              }
              builder = new Notification.Builder(context, UPushNotificationChannel.PRIMARY_CHANNEL);
            } else {
              builder = new Notification.Builder(context);
            }
            RemoteViews myNotificationView = new RemoteViews(context.getPackageName(),
              R.layout.notification_view);
            myNotificationView.setTextViewText(R.id.notification_title, msg.title);
            myNotificationView.setTextViewText(R.id.notification_text, msg.text);
            myNotificationView.setImageViewBitmap(R.id.notification_large_icon, getLargeIcon(context, msg));
            myNotificationView.setImageViewResource(R.id.notification_small_icon,
              getSmallIconId(context, msg));
            builder.setContent(myNotificationView)
              .setSmallIcon(getSmallIconId(context, msg))
              .setTicker(msg.ticker)
              .setAutoCancel(true);
            return builder.getNotification();
          default:
            //默认为0，若填写的builder_id并不存在，也使用默认。
            return super.getNotification(context, msg);
        }
      }
    };
    pushAgent.setMessageHandler(messageHandler);

    /*
     * 自定义行为的回调处理，参考文档：高级功能-通知的展示及提醒-自定义通知打开动作
     * UmengNotificationClickHandler是在BroadcastReceiver中被调用，故
     * 如果需启动Activity，需添加Intent.FLAG_ACTIVITY_NEW_TASK
     */
    UmengNotificationClickHandler notificationClickHandler = new UmengNotificationClickHandler() {

      @Override
      public void launchApp(Context context, UMessage msg) {
        super.launchApp(context, msg);
      }

      @Override
      public void openUrl(Context context, UMessage msg) {
        super.openUrl(context, msg);
      }

      @Override
      public void openActivity(Context context, UMessage msg) {
        super.openActivity(context, msg);
      }

      @Override
      public void dealWithCustomAction(Context context, UMessage msg) {
        Toast.makeText(context, msg.custom, Toast.LENGTH_LONG).show();
      }
    };
    //使用自定义的NotificationHandler
    pushAgent.setNotificationClickHandler(notificationClickHandler);

    //注册推送服务 每次调用register都会回调该接口
    pushAgent.register(new IUmengRegisterCallback() {
      @Override
      public void onSuccess(String deviceToken) {
        Log.i(TAG, "device token: " + deviceToken);
        context.sendBroadcast(new Intent(UPDATE_STATUS_ACTION));
      }

      @Override
      public void onFailure(String s, String s1) {
        Log.i(TAG, "register failed: " + s + " " + s1);
        context.sendBroadcast(new Intent(UPDATE_STATUS_ACTION));
      }
    });

    //使用完全自定义处理
//        pushAgent.setPushIntentServiceClass(UmengNotificationService.class);

    //小米通道
    //MiPushRegistar.register(this, XIAOMI_ID, XIAOMI_KEY);
    //华为通道
    //HuaWeiRegister.register(this);
    //魅族通道
    //MeizuRegister.register(this, MEIZU_APPID, MEIZU_APPKEY);
  }
}
